Amazon ECS Exec Checkerでもエラーが出ない場合はネットワーク疎通性も確認しましょう
アノテーション・テクニカルサポートチームの hato です。
「Amazon ECS Exec が実行できません。Amazon ECS Exec Checker も試しましたがエラーはありません」というお問い合わせを頂いた際に、サポート担当者が確認する内容と調査方法をご紹介します。
デバッグ用にAmazon ECS Exec を使用 - Amazon Elastic Container Service
Amazon ECS Exec チェッカーを使用して検証する
Amazon ECS Exec チェッカー スクリプトを使用すると、Amazon ECS クラスターとタスクが ECS Exec 機能を使用するための前提条件を満たしていることを確認および検証できます。
確認すること
ネットワーク疎通性を確認します。
2022年10月時点の挙動として、Amazon ECS Exec Checker はエンドポイントへのネットワーク疎通性までは確認していないため、セキュリティグループ等でエンドポイントへの通信を遮断し、エラーが起きている可能性が考えられます。
そのため、Amazon ECS Exec Checker でもエラーが見つけられない場合は、ECS タスクや(設定している場合)VPC エンドポイントのセキュリティグループ等を確認し、ネットワーク疎通性に問題がないかを調査します。
やってみた
VPC エンドポイントを使用している環境で、VPC エンドポイントのセキュリティグループでインバウンド通信を許可していない場合の例となります。
エラーの状況
ECS Exec はTargetNotConnectedException
が表示されます。
$ aws ecs execute-command --cluster hato-cluster \ --task 11beb0f844354e7da8e88100f0a0da81 \ --container hato-container \ --interactive \ --command "/bin/sh" The Session Manager plugin was installed successfully. Use the AWS CLI to start a session. An error occurred (TargetNotConnectedException) when calling the ExecuteCommand operation: The execute command failed due to an internal error. Try again later.
Amazon ECS Exec Checker ではエラー(赤色)がない状況です。
$ ./check-ecs-exec.sh hato-cluster 11beb0f844354e7da8e88100f0a0da81 ------------------------------------------------------------- Prerequisites for check-ecs-exec.sh v0.7 ------------------------------------------------------------- jq | OK (/opt/homebrew/bin/jq) AWS CLI | OK (/usr/local/bin/aws) ------------------------------------------------------------- Prerequisites for the AWS CLI to use ECS Exec ------------------------------------------------------------- AWS CLI Version | OK (aws-cli/2.7.18 Python/3.9.11 Darwin/21.6.0 exe/x86_64 prompt/off) Session Manager Plugin | OK (1.2.339.0) ------------------------------------------------------------- Checks on ECS task and other resources ------------------------------------------------------------- Region : ap-northeast-1 Cluster: hato-cluster Task : 11beb0f844354e7da8e88100f0a0da81 ------------------------------------------------------------- Cluster Configuration | Audit Logging Not Configured Can I ExecuteCommand? | arn:aws:iam::123456789012:user/hato ecs:ExecuteCommand: allowed ssm:StartSession denied?: allowed Task Status | RUNNING Launch Type | Fargate Platform Version | 1.4.0 Exec Enabled for Task | OK Container-Level Checks | ---------- Managed Agent Status ---------- 1. RUNNING for "exec-container" ---------- Init Process Enabled (bastion-fargate-taskdef:4) ---------- 1. Disabled - "exec-container" ---------- Read-Only Root Filesystem (bastion-fargate-taskdef:4) ---------- 1. Disabled - "exec-container" Task Role Permissions | arn:aws:iam::123456789012:role/bastion-fargate ssmmessages:CreateControlChannel: allowed ssmmessages:CreateDataChannel: allowed ssmmessages:OpenControlChannel: allowed ssmmessages:OpenDataChannel: allowed VPC Endpoints | Found existing endpoints for vpc-abcd123456789: - com.amazonaws.ap-northeast-1.ecr.dkr - com.amazonaws.ap-northeast-1.s3 - com.amazonaws.ap-northeast-1.ecr.api - com.amazonaws.ap-northeast-1.logs - com.amazonaws.ap-northeast-1.ssmmessages Environment Variables | (bastion-fargate-taskdef:4) 1. container "exec-container" - AWS_ACCESS_KEY: not defined - AWS_ACCESS_KEY_ID: not defined - AWS_SECRET_ACCESS_KEY: not defined
ネットワーク疎通性を確認する
ECS タスクからエンドポイントまでのセキュリティグループやネットワーク ACLを順に確認しても良いですが、ネットワーク疎通性をチェックできる Reachability Analyzer が提供されているため、今回はこちらを使用します。
Reachability Analyzer を使用して VPC 接続の問題をトラブルシューティングする
Reachability Analyzer は起点と終点(どこから、どこまで)を指定する必要があります。
まず、起点となる ECS タスクの ENI を確認します。(例:eni-0daa14330c594083d
)
同様に終点となる VPC エンドポイントの ID を確認します。(例:vpce-09a6795e4ecd6db04
)
Reachability Analyzer のパス設定にそれぞれの情報を指定して「パスの作成と分析」をクリックします。
ネットワーク疎通性がないことが確認できました。
疎通性がない原因は「説明」セクションからも確認できますが、その下の「パスの詳細」からも確認できます。
個人の好みですが「パスの詳細」の方が経路も含めて確認できるのでおすすめです。
VPC エンドポイントのインバウンドルールに一致するルール(許可)がないことが確認できます。
リンクをクリックしてインバウンドルールの許可を追加すると、Amazon ECS Exec が実行できるようになります。
最後に
サポートにお問い合わせいただく際はお試し頂いた内容と結果を添えると、効率的かつ迅速な解決が期待できますのでご協力をお願いいたします。
技術的なお問い合わせに関するガイドライン | AWS サポート
すでに試した対応策があればご教示ください
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。